package com.example.hp.week12;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;

public class SaveInstanceActivity extends AppCompatActivity {
    //定义用于保存数据的 Bundle 对象的键值常量
    private final String GAME_STATE_KEY = "gameState";
    private final String GAME_CREDITS_KEY = "gameCredits";

    //创建用于访问“全局变量”的 Application 对象
    private MyApplication app;
    //定义用于显示信息的文本框
    private TextView global_variable_txt;
    // 定义当前页面中的组件
    //game_credits_edt 作为本页面中组件的代表，用于演示如何被保存和恢复
    private EditText game_credits_edt;
    //定义当前类中的“局部变量” //gameState 作为本类中的私有成员的代表，用于演示如何被保存和恢复
    String gameState;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //创建页面时参数 savedInstanceState 不为空，则说明活动曾被回收，并且相关数据被保存到这个参数中
        // 参数 savedInstanceState 是一个 Bundle 对象，在保存时按关键字 key 索引（见后面实现保存的代码）
        // gameState 是一个普通的变，可以在出现界面之前恢复
        if (savedInstanceState != null) {
            gameState = savedInstanceState.getString(GAME_STATE_KEY);
        }
        // /指定活动采用的页面布局并显示
        // 在此之前，布局中的各组件尚未创建，故不能访问
        setContentView(R.layout.activity_save_instance);

        //获得 MyApplication 对象 app
        app = (MyApplication) getApplication();
        //初始化组件，从 app 取出全局变量的值，可见 MyApplication 对象 app 是对整个应用有效的变量
        global_variable_txt = (TextView) findViewById(R.id.global_variable_txt);
        global_variable_txt.setText("用户姓名:"+app.getUserName()+"\n 机构名称："+app.getOrgName());

        //初始化组件
        game_credits_edt = (EditText) findViewById(R.id.game_credits_edt);
    }//
    // 当活动被回收时执行
    // 可见将需要保存的数据按关键字存入了 Bundle 对象中
    // 将来取出时，也将按同样的关键字取出
    @Override
    public void onSaveInstanceState(Bundle outState) {
        //保存游戏状态（以此为例演示对类内普通成员的处理）
        outState.putString(GAME_STATE_KEY, gameState);
        //保存游戏积分（以此为例演示对布局中组件的处理）
        outState.putString(GAME_CREDITS_KEY, game_credits_edt.getText().toString());
        // 执行其父类的同名方法
        super.onSaveInstanceState(outState); }
    // 在活动被重建时执行，从而恢复其值（在 onCreate()方法之后，此时布局中的各种组件已经被 实例化了）
    // 组件不可像普通成员那样，在布局出现之前恢复
    @Override
    public void onRestoreInstanceState(Bundle savedInstanceState) {
        game_credits_edt.setText(savedInstanceState.getString(GAME_CREDITS_KEY));
    } 
}
